package xyz.mumuwei.youthcourseserver.service;

import com.baomidou.mybatisplus.extension.service.IService;
import xyz.mumuwei.youthcourseserver.common.dto.PageDto;
import xyz.mumuwei.youthcourseserver.common.lang.Result;
import xyz.mumuwei.youthcourseserver.pojo.Course;

/**
 * @author mumuwei
 * @since 2022-02-19
 */
public interface CourseService extends IService<Course> {

    /**
     * 课程列表-分页
     * @param pageDto 分页参数
     * @param uid 用户id
     * @return 分页后的课程列表
     */
    Result getCoursePage(PageDto pageDto, Integer uid);

    /**
     * 课程列表-不分页
     * @return 课程列表
     */
    Result getCourseList();

    /**
     * /**
     * 添加课程
     * @param course 新建课程信息
     * @return 结果
     * @throws Exception 异常
     */
    Result addCourse(Course course) throws Exception;

    /**
     * 更新课程
     * @param course 更新课程信息
     * @return 结果
     * @throws Exception 异常
     */
    Result updateCourse(Course course) throws Exception;

    /**
     * 根据id 获取课程信息
     * @param id 课程id
     * @return 课程信息
     */
    Result getCourseById(Integer id);

    /**
     * 获取课程年龄段列表
     * @return 年龄段列表
     */
    Result getAgeList();

    /**
     * 获取课程分类列表
     * @return 课程分类列表
     */
    Result getTypeList();

    /**
     * 根据课程分类获取分页课程列表
     * @param pageDto 分类参数
     * @return 返回数据
     */
    Result getPageByType(PageDto pageDto);

    /**
     * 根据课程 Id 删除课程信息
     * @param id 课程 Id
     * @return 删除结果
     */
    Result deleteCourseById(Integer id);

    /**
     * 获取用户今日课程列表
     * @param uid 用户 Id
     * @return 课程列表
     */
    Result getTodayCourseList(Integer uid);

    /**
     * 获取用户所有课程列表
     * @param uid 用户 Id
     * @return 课程列表
     */
    Result getStudentCourseList(Integer uid);

    /**
     * 判断用户是否已购买该课程
     * @param uid 用户id
     * @param courseId 课程id
     * @return 查询结果
     */
    Result checkStudentBuyCourseByUserId(Integer uid, Integer courseId);

    /**
     * 分角色获取课程列表
     * @param uid 账户id
     * @return 课程列表
     */
    Result getCourseListByRole(Integer uid);

    /**
     * 获取销量前五
     * @return 数据
     */
    Result getCourseSales();
}
